package com.cbh.amadeus.client.receiver.tool;

import com.cbh.amadeus.client.domain.MessageResultModel;

import java.util.List;

/**
 * ACK 增强模型器
 * <p>
 * 用以客户端记录消费者的ACK信息,
 * 并设置返回已成功消费的消息信息.
 * 用以精细控制可再次消费消息的消费者类,
 * 作为第一道幂等模型逻辑使用,降低性能损耗.
 *
 * @author ChenBiHui
 * @date 2025/5/2
 */
public interface MessageResultModelTool {

    /**
     * ID生成器
     *
     * @return 主键
     */
    String sequence();

    /**
     * 持久化操作 新增/更新
     *
     * @param model ACK消息
     */
    void retain(MessageResultModel model);

    /**
     * 在消息重发阶段,用以返回已成功消费的信息
     *
     * @param topic     主題
     * @param messageId 消息ID
     * @param consumer  消费者
     * @return 已成功消费的信息
     */
    List<MessageResultModel> complete(String topic, String messageId, String consumer);
}
